在昨天的文章中,我們已經探討了如何使用陣列來實作佇列。不過,陣列的主要缺點是其大小是固定的。為了克服這個限制,我們可以使用串列來實作佇列,這樣就可以動態地增加或減少佇列的大小。
在本文中,我們將使用鏈式串列來實作一個簡單的佇列。
串列與佇列
鏈式串列是一種動態資料結構,可以有效地在其任何位置插入或刪除節點。由於佇列僅在尾部進行插入操作並在前端進行刪除操作,使用單鏈串列實作佇列是很直觀的。
使用串列實作佇列
以下是使用鏈式串列實作佇列的基本結構和操作:
#include <iostream>
class Node {
public:
int data;
Node* next;
Node(int data) : data(data), next(nullptr) {}
};
class Queue {
private:
Node* front;
Node* rear;
public:
Queue() : front(nullptr), rear(nullptr) {}
bool isEmpty() {
return front == nullptr;
}
void enqueue(int data) {
Node* newNode = new Node(data);
if (isEmpty()) {
front = rear = newNode;
} else {
rear->next = newNode;
rear = newNode;
}
}
int dequeue() {
if (isEmpty()) {
std::cout << "Queue is empty!" << std::endl;
return -1;
}
int value = front->data;
Node* temp = front;
front = front->next;
delete temp;
if (!front) {
rear = nullptr;
}
return value;
}
int peek() {
if (isEmpty()) {
std::cout << "Queue is empty!" << std::endl;
return -1;
}
return front->data;
}
};
int main() {
Queue q;
q.enqueue(5);
q.enqueue(10);
q.enqueue(15);
std::cout << "Front of the queue: " << q.peek() << std::endl; // 5
q.dequeue();
std::cout << "Front of the queue: " << q.peek() << std::endl; // 10
return 0;
}
總結
使用串列來實作佇列允許我們動態地管理資料結構的大小,這是陣列所不能做到的。鏈式串列提供了一個彈性和動態的方法來實作佇列,使我們能夠根據需要來調整佇列的大小。